package br.com.academia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.academia.modelo.Usuario;

public class UsuarioDAO {

	private Connection connection;
	private PreparedStatement stmt;
	private ResultSet rs;
	private String sql;
	private boolean resultado = true;

	public UsuarioDAO() {
		connection = new ConnectionFactory().getConnection();
	}

	public boolean logar(Usuario usuario) {
		sql = "select idusuario from usuario where login=? and senha=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, usuario.getLogin());
			stmt.setString(2, usuario.getSenha());
			rs = stmt.executeQuery();
			resultado = rs.next();
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public boolean incluir(Usuario usuario) {
		sql = "insert into usuario (login , senha, email) " + "values (?,?,?)";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, usuario.getLogin());
			stmt.setString(2, usuario.getSenha());
			stmt.setString(3, usuario.getEmail());
			stmt.executeUpdate();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	private void close() {
		try {
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public boolean alterar(Usuario usuario) {
		sql = "update usuario set login=? , senha=?, email=? where idusuario=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, usuario.getLogin());
			stmt.setString(2, usuario.getSenha());
			stmt.setString(3, usuario.getEmail());
			stmt.setInt(4, (int) usuario.getIdusuario());
			stmt.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public boolean excluir(Usuario usuario) {
		sql = "delete from usuario where idusuario = ?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, usuario.getIdusuario());
			stmt.execute();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public Usuario consultar(Usuario usuario) {
		sql = "select login, email from usuario where idusuario=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, (int) usuario.getIdusuario());
			rs = stmt.executeQuery();
			rs.next();
			usuario.setLogin(rs.getString("login"));
			usuario.setEmail(rs.getString("email"));
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return usuario;
	}

	public ArrayList<Usuario> listar() {
		ArrayList<Usuario> lista = new ArrayList<>();
		sql = "select idusuario, login, email from usuario order by login";
		try {
			stmt = connection.prepareStatement(sql);
			rs = stmt.executeQuery();
			Usuario usuario;
			while (rs.next()) {
				usuario = new Usuario();
				usuario.setIdusuario(rs.getInt("idusuario"));
				usuario.setLogin(rs.getString("login"));
				usuario.setEmail(rs.getString("email"));
				lista.add(usuario);
			}
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return lista;
	}
}
